from machine import I2C, Pin, SPI    # 导入通信引脚及相关的库
import ds1307, st7789,utime,LM35     # 导入时钟模块，屏幕驱动，时间模块和温度模块

i2c = I2C(1, sda=Pin(0), scl=Pin(1),freq=100000)    # 构造IIC对象，将1号引脚设置为scl，将0号引脚设置为sda，频率设为100000
week_day = ["Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"]    # 设置星期列表便于下方将数字转换为星期
ds = ds1307.DS1307(i2c)    # 构造时钟对象

spi = SPI(0, baudrate=40000000, polarity=1, phase=0, bits=8, endia=0, sck=Pin(6), mosi=Pin(8))    # 构造spi对象
# display = st7789.ST7789(spi, 240, 240, reset=Pin(11,func=Pin.GPIO, dir=Pin.OUT), dc=Pin(7,func=Pin.GPIO, dir=Pin.OUT),direction=st7789.Y_MIRROR)    # 构造屏幕控制对象（镜像）
display = st7789.ST7789(spi, 240, 240, reset=Pin(11,func=Pin.GPIO, dir=Pin.OUT), dc=Pin(7,func=Pin.GPIO, dir=Pin.OUT)) # 构造屏幕控制对象（非镜像）
display.init()    # 屏幕初始化
display.fill(st7789.color565(255, 255, 255))    # 设置屏幕背景为白色
display.fill_rect(0,0, 240, 8, st7789.color565(176,186,80)) # 以下四句为画边框
display.fill_rect(0,232, 240, 8, st7789.color565(176,186,80))
display.fill_rect(0,0, 8, 240, st7789.color565(176,186,80))
display.fill_rect(232,0, 8, 240, st7789.color565(176,186,80))

while True:  # 不断刷新，获取实时数据
    date = ds.datetime()  # 获取时间和日历信息
    year = date[0]  # 年
    month = date[1]  # 月
    day = date[2]  # 日
    weekday = date[3]  # 星期
    hour = date[4]  # 时
    minute = date[5]  # 分
    second = date[6]  # 秒
    te=LM35.temp()     # 温度

    year1_str = "%04d" % year      # 统一格式
    month1_str = "%02d" % month
    day1_str = "%02d" % day
    time1_str = "%02d:%02d" % (hour, minute)
    second1_str = "%02d" % second

    display.draw_string(20, 15, "TIME", size=2, color=st7789.color565(112, 112, 112),spacing=2) # 时间标签
    display.draw_string(40, 40, time1_str, size=6, color=st7789.color565(0, 0, 0),spacing=2)   # 在屏幕上显示时分
    display.draw_string(205, 70, second1_str, size=2, color=st7789.color565(67,77,120),spacing=2) # 在屏幕上显示秒
    display.draw_string(10, 105, " YEAR   MONTH  DAY", size=2, color=st7789.color565(209,123,17),spacing=2) # 年月日标签
    display.draw_string(20, 130,  year1_str+"  "+month1_str, size=3, color=st7789.color565(209,123,17),spacing=2) # 在屏幕上显示年月
    display.draw_string(188, 130,  day1_str, size=3, color=st7789.color565(209,123,17),spacing=2) # 在屏幕上显示日
    display.draw_string(10, 170, " WEEK", size=2, color=st7789.color565(99,194,118),spacing=2) # 星期标签
    display.draw_string(20, 195, week_day[weekday - 1], size=3, color=st7789.color565(99,194,118),spacing=2) # 在屏幕上显示星期
    display.draw_string(125, 170, "TEMP", size=2, color=st7789.color565(16,60,237),spacing=2) # 温度标签
    display.draw_string(120, 195, te,size=3,color=st7789.color565(16,60,237),bg=st7789.WHITE,spacing=2)     # 在屏幕上显示温度
    display.draw_string(190, 200, "C",size=2,color=st7789.color565(16,60,237),spacing=2) # 温度单位
    utime.sleep(1)     # 刷新间隔